package cn.bugstack.springframework.context;

import java.util.EventListener;

/**
 * 在Java中，java.util.EventListener接口是事件监听器接口，用于标识实现了该接口的类可以监听特定类型的事件。EventListener接口本身没有定义任何方法，它只是作为其他事件监听器接口的父接口，用于统一标识事件监听器的类型。
 * 通常情况下，Java中的事件监听器接口都会扩展自EventListener接口，例如：
 * ActionListener：用于监听与用户操作相关的动作事件，如按钮点击等。
 * MouseListener：用于监听鼠标事件，如点击、移动等。
 * KeyListener：用于监听键盘事件，如按键按下、释放等。
 * 实现了EventListener接口的类可以通过注册到相应的事件源上来监听特定类型的事件，并在事件发生时执行相应的操作。
 * 通过事件监听器，可以实现事件的解耦和处理逻辑的分离，提高代码的灵活性和可维护性。
 */
/**
 * 应用事件监听器接口，继承自EventListener接口。
 * 该接口用于定义如何处理特定的应用事件。
 *
 * @param <E> 事件类型，必须是ApplicationEvent的子类型。
 */
public interface ApplicationListener<E extends ApplicationEvent> extends EventListener {

    /**
     * 处理应用事件的方法。
     * 当监听器侦听到特定的应用事件时，此方法将被调用以进行相应的处理。
     * event：需要响应的事件对象，类型为 E，即扩展自 ApplicationEvent 的特定应用事件
     * 当监听器侦听到特定的应用事件时，onApplicationEvent 方法将被调用，以进行相应的处理。
     * 在该方法内部，可以编写处理事件的逻辑代码。
     * 通常情况下，我们会实现 ApplicationListener 接口，并重写 onApplicationEvent 方法，以侦听和处理特定类型的应用事件。
     * 通过注册这些实现了 ApplicationListener 接口的监听器到 Spring 应用上下文中，可以在事件发生时触发对应的监听器，并执行相应的逻辑。
     */
    void onApplicationEvent(E event);

}
